依照昨天的結論,我們按步驟來處理。
在 Day 20 的時候,我們在 dataframe 裡面新增了 time_in_minutes
的欄位。
我們可以進一步利用此欄位再新增一個 is_night_time
的欄位,用來判斷是否該筆記錄為晚上的時間,以方便後續分類。
首先讓我們建立一個 is_night_time
的 function,讓我們建在 convert_time_to_int
底下:
def is_night_time(time_in_minutes: int):
# after 15:00
if (time_in_minutes > 900):
return True
return False
這邊以下午三點
作為區分白天關門以及晚上關門的分界,原因如下圖:
接著讓我們再次運用之前使用的 apply()
來新增欄位:
df['is_night_time'] = df['time_in_minutes'].apply(is_night_time)
is_night_time
區分成兩個獨立的 dataframe為了避免不同目的的資料集相互污染
,我們以 is_night_time
將原來的 df 複製並分裂成兩個獨立的 dataframe,這邊使用的是 query
的 method:
df_night = df.query('is_night_time == True')
df_day = df.query('is_night_time == False')
有興趣的讀者可以 print 出來看看目前三個 dataframe 分別長什麼樣子~
讓我們再次使用 groupby
來達到目的:
night_group_by_weekdays = df_night.groupby('星期幾')
這邊讓我們按照 df_day
及 night_group_by_weekdays
各自的 time_in_minutes
,用 mean()
取該欄位的算數平均數:
day_mean = df_day['time_in_minutes'].mean()
night_mean = night_group_by_weekdays['time_in_minutes'].mean()
這次不視覺化了,讓我們直接在 console 看赤裸裸的數字:
print('\n\n\n')
print("day time")
print(day_mean)
print('\n\n\n')
print("night time")
print(night_mean)
print('\n\n\n')
雖然印證了我們在 Day 19 的假設,不過原來其實差異不大
呀ORZ
今天在此告一段落,明天再來整理數據背後的脈絡。
Pandas: Conditionally Grouping Values